为什么对不活跃的用户进行 authenticate() return None?
Why authenticate() return None for inactive users?
我 CustomUser
喜欢以下内容:
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=100, unique=True)
username = models.CharField(max_length=20, unique=True)
is_active = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
...
即active
default=False
用户注册后自动处理 UserLogin
def 即:
def UserLogin(request):
if request.POST:
username = request.POST['username']
user = authenticate(username=username, password=request.POST['password'])
print('user :', user) # which is print None if user inactive
if user is not None:
print('is user active:', user.is_active) # should print True or False
if user.is_active:
login(request, user)
...
else: # handle user inactive
...
else: # for None user
...
我仍在尝试理解为什么 authenticate
return None
不活跃的用户?
搜索后我发现更有趣的问题 user.is_authenticated 对于模板上的非活动用户总是 returns False
但是没有找到适合我的情况的答案
首先,请注意 Django 附带一个 login view and authentication form,它会在非活动用户尝试登录时显示适当的错误消息。如果您使用它们,那么您可能不必更改 authenticate()
.
从 Django 1.10 开始,默认的 ModelBackend
身份验证后端不允许 is_active = False
的用户登录。
如果您想允许不活跃的用户登录,那么您可以使用 AllowAllUsersModelBackend
后端。
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.AllowAllUsersModelBackend']
有关详细信息,请参阅 is_active
文档,
我 CustomUser
喜欢以下内容:
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=100, unique=True)
username = models.CharField(max_length=20, unique=True)
is_active = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
...
即active
default=False
用户注册后自动处理 UserLogin
def 即:
def UserLogin(request):
if request.POST:
username = request.POST['username']
user = authenticate(username=username, password=request.POST['password'])
print('user :', user) # which is print None if user inactive
if user is not None:
print('is user active:', user.is_active) # should print True or False
if user.is_active:
login(request, user)
...
else: # handle user inactive
...
else: # for None user
...
我仍在尝试理解为什么 authenticate
return None
不活跃的用户?
搜索后我发现更有趣的问题 user.is_authenticated 对于模板上的非活动用户总是 returns False 但是没有找到适合我的情况的答案
首先,请注意 Django 附带一个 login view and authentication form,它会在非活动用户尝试登录时显示适当的错误消息。如果您使用它们,那么您可能不必更改 authenticate()
.
从 Django 1.10 开始,默认的 ModelBackend
身份验证后端不允许 is_active = False
的用户登录。
如果您想允许不活跃的用户登录,那么您可以使用 AllowAllUsersModelBackend
后端。
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.AllowAllUsersModelBackend']
有关详细信息,请参阅 is_active
文档,